
// 找出所有路由
const getAllRoutes = routes => {
    const result = []
    routes.forEach(route => {
        if (route.children && route.children.length > 0) {
            result.push(...route.children)
        }
    })

    return result
}


/**
 * 处理脱离层级的路由
 */
export const filterRoutes = (routes) => {
    // 所有的子集路由
    const allRoutes = getAllRoutes(routes)
    // 根据子集路由进行查重操作
    return routes.filter(route => {
        // console.log('原始菜单：', route.path)
        //根据 route 在 allRoutes 中进行查重，把所有重复的路由剔除
        return !allRoutes.find(childrenRoute => {
            return childrenRoute.path == route.path
        })
    })
}

/**
 * 根据 routes 数据，返回对应的 menu 规则数据
 */
/*export const generateMenus = (routes, basePath='') => {
    const result = []
    routes.forEach(item => {
        //不存在children && 不存在meta 直接 return 
        if (isNull(item.children) && isNull(item.meta)) return
        //存在children 但不存在meta，则迭代 generateMenus
        if (!isNull(item.children) && isNull(item.meta)) {
            result.push(...generateMenus(item.children))
            return
        }
        // 不存在children 但存在meta 直接加入 result
        const routePath = path.resolve(basePath, item.path)
        // 处理 路由分离后，可能存在的同名父路由的情况
        let route = result.find(item => item.path === routePath)
        if (!route) {
            route = {
                ...item,
                path: routePath,
                children: []
            }
            if (route.meta.icon && route.meta.title) {
                result.push(route)
            }
        }

        // 存在 children && 存在meta
        if (!isNull(item.children)) {
            route.children.push(...generateMenus(item.children, route.path))
        }
    })
    console.log('过滤后的菜单:', result)
    return result
}*/
export const generateMenus = (routes) => {
    const result = []
    routes.forEach(item => {
        const hasChildren = !isNull(item.children)
        const hasMeta = !isNull(item.meta)
        
        if (!hasChildren && !hasMeta) return
        
         // 存在 children 不存在 meta，进入迭代
         if (isNull(item.meta) && !isNull(item.children)) {
             result.push(...generateMenus(item.children))
             return
         }
         
         // 使用直接路径
         const routePath = item.path
         
         // 路由分离之后，存在同名父路由的情况，需要单独处理
         let route = result.find((item) => item.path === routePath)
         if (!route) {
             route = {
                 ...item,
                 path: routePath,
                 children: []
             }
             
             // icon 与 title 必须全部存在
             if (route.meta.icon && route.meta.title) {
                 result.push(route)
             }
         }
         
         // 存在 children 进入迭代到children
         if (item.children) {
             route.children.push(...generateMenus(item.children, route.path))
         }
     })
    
    // console.log('过滤后的菜单:', result)
    return result
}
    
/**
 * 判断数据是否为空值
 */
function isNull(data) {
  if (!data) return true
  if (JSON.stringify(data) === '{}') return true
  if (JSON.stringify(data) === '[]') return true
  return false
}
